package server.interfaces;

import java.util.List;

import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
import javax.xml.ws.BindingType;

import model.Author;
import model.Building;
import model.Calendar;
import model.CalendarList;
import model.Department;
import model.Direction;
import model.Group;
import model.LectureRoom;
import model.Reservation;
import model.Teacher;

@WebService
@SOAPBinding(style = Style.DOCUMENT)
@BindingType(javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING)
public interface TimeTable 
{
	/**
	 * Returns list with authors
	 */
	List<Author> getAuthors();
	
	/**
	 * Returns state of web service<BR>
	 * @return true - if web service is updating <BR>
	 * false - if web service is working
	 */
	boolean getState();
	
	/**
	 * Returns last date of updating
	 */
	String getLastUpdate();
	
	/**
	 * List of departments
	 */
	List<Department> getDepartments();
	
	/**
	 * List of teachers in selected department
	 */
	Department getDepartmentWithTeachers(@WebParam(name="id") String id);
	
	/**
	 * Selected teacher's timetable
	 */
	Teacher getTeacherTimetable(@WebParam(name="id") String id);
	
	/**
	 * Selected teacher's reservations
	 */
	Reservation getTeacherReservations(@WebParam(name="id") String id);
	
	/**
	 * List of departments with directions
	 */
	List<Department> getDepartmentsWithDirections();
	
	/**
	 * Selected direction with groups
	 */
	Direction getDirectionWithGroups(@WebParam(name="id") String id);
	
	/**
	 * Selected group timetable
	 */
	Group getGroupTimetable(@WebParam(name="id") String id);
	
	/**
	 * List of buildings
	 */
	List<Building> getBuildings();
	
	/**
	 * Selected building with lecture rooms
	 */
	Building getBuildingWithLectureRooms(@WebParam(name="id") String id);
	
	/**
	 * Selected lecture room with timetable
	 */
	LectureRoom getLectureRoomTimetable(@WebParam(name="id") String id);
	
	/**
	 * Selected lecture room reservations
	 */
	Reservation getLectureRoomReservations(@WebParam(name="id") String id);
	
	/**
	 * List of general calendars
	 */
	List<CalendarList> getCalendarList();
	
	/**
	 * Selected calendar with entries
	 */
	Calendar getCalendar(@WebParam(name="id") String id);
}
